﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Infinity.Expressions.Core;

namespace Infinity.Expressions.Loops
{
	/// <summary>
	/// A ciklus absztrakt reprezentációja
	/// </summary>
	public abstract class Loop : AbstractProgram
	{
		/// <summary>
		/// A ciklus ciklusmagja
		/// </summary>
		public AbstractProgram Body { get; set; }

		/// <summary>
		/// A teljes ciklus lefutásáért felelős függvény. 
		/// </summary>
		public override void Run()
		{
			while (Step())
			{
				if (Body != null)
				{
					Body.Run();
				}
			}
		}

		/// <summary>
		/// Lépésenkénti végrehajtásért felelős függvény.
		/// </summary>
		public abstract bool Step();
	}
}
